package com.esir.android;

import android.content.Context;
import android.content.res.ColorStateList;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Build;

import java.lang.ref.WeakReference;

import androidx.annotation.ColorInt;
import androidx.annotation.ColorRes;
import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull;
import androidx.annotation.StringRes;
import androidx.appcompat.content.res.AppCompatResources;
import androidx.core.content.ContextCompat;

/**
 * Resource 资源管理类
 *
 * @author 黄嵘才
 * @date 2017/7/17
 */

public final class Resource {
    /**持有的应用的Context*/
    private static WeakReference<Context> contextRef;

    private Resource() {
    }

    /**
     * 初始化ResUtil
     * 不要传入null值的Context对象
     *
     * @param context Context 将会持有Content.getApplicationContext()
     */
    public static void init(Context context) {
        if (context != null) {
            contextRef = new WeakReference<>(context.getApplicationContext());
        } else {
            throw new IllegalArgumentException("Context 不应为null. Context:" + context);
        }

    }

    /**
     * 获取应用的Context上下文对象
     *
     * @return {@link Context}
     */
    public static Context context() {
        Context context = null;
        if (contextRef != null) {
            context = contextRef.get();
        }
        return context;
    }

    /**
     * 获取颜色值
     *
     * @param resId 资源ID（定义在XML文件中的）
     * @return 颜色值
     */
    @ColorInt
    public static int getColor(@ColorRes int resId) {
        return ContextCompat.getColor(context(), resId);
    }

    /**
     * 获取颜色值
     *
     * @param resId 资源ID（定义在XML文件中的）
     * @return 颜色值
     */
    public static ColorStateList getColorStateLists(@ColorRes int resId) {
        return ContextCompat.getColorStateList(context(), resId);
    }

    /**
     * 获取文案
     *
     * @param resId 资源ID（定义在XML文件中的）
     * @return 文案
     */
    @NonNull
    public static String getString(@StringRes int resId) {
        Context context = context();
        if (context == null) {
            return "";
        }
        return context.getString(resId);
    }

    /**
     * 获取文案
     *
     * @param resId      资源ID（定义在XML文件中的）
     * @param formatArgs formatArgs
     * @return 文案
     */
    @NonNull
    public static String getString(@StringRes int resId, Object... formatArgs) {
        return context().getString(resId, formatArgs);
    }

    /**
     * 获取Drawable
     *
     * @param resId 资源ID（定义在XML文件中的）
     * @return Drawable
     */
    public static Drawable getDrawable(@DrawableRes int resId) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            return ContextCompat.getDrawable(context(), resId);
        } else {
            return AppCompatResources.getDrawable(context(), resId);
        }
    }

    /**
     * 判断一个颜色是深色 or 浅色
     *
     * @param color 被判定的色值
     * @return true 浅色
     */
    public static boolean isLightColor(int color) {
        double darkness = 1 - (0.299 * Color.red(color) + 0.587 * Color.green(color) + 0.114 * Color.blue(color)) / 255;
        if (darkness < 0.5) {
            return true; // It's a light color
        } else {
            return false; // It's a dark color
        }
    }

}
